A storage system typically comprises one or more storage devices into which information may be entered, and from which information may be obtained, as desired. The storage system includes a storage operating system that functionally organizes the system by, inter alia, invoking storage operations in support of a storage device implemented, by the system. The storage system may be implemented in accordance with a variety of storage architectures including, but not limited to, a network-attached storage environment, a storage are network, and a disk assembly directly attached to a client or host computer. The storage devices are typically disk drives organized as a disk array, managed according to a storage protocol, wherein the term “disk” commonly describes a self-contained rotating magnetic media storage device. The term disk in this context is synonymous with hard disk drive (HDD) or direct access storage device (DASD).
The storage operating system of the storage system may implement a high-level module, such as a file system, to logically organize storage containers for the information. For example, the information may be stored on the disks as a hierarchical structure of directories, files, and blocks. Each “on-disk” file may be implemented as a set of data structures, i.e., disk blocks, configured to store information, such as the actual data for the file. These data blocks are organized within a volume block number (vbn) space that is maintained by the file system. The file system may also assign each data block in the file a corresponding “file offset” or file block number (fbn). The file system typically assigns sequences of its fbns on a per-file basis, whereas vbns are assigned over a larger volume address space. The file system organizes the data blocks within the vbn space as a “logical volume”; each logical volume may be, although it is not necessarily, associated with its own file system. The file system typically consists of a contiguous range of vbns from zero to n, for a file system of size n+1 blocks.
Host virtualization disassociates storage capacity from its underlying physical disk restrictions to create large pools of storage that are made available to multiple hosts running different operating systems. These pools of virtual capacity can be configured as virtual disks and presented to any or all connected hosts. Virtual disks are created from these pools and are dynamically allocated to servers on the network as logical storage when needed.
The boundaries of a storage device are usually based on an eight-bit character, known as a byte. Natural storage boundaries of a particular storage device are based upon a multiple number of bytes. Each storage device performs Input/Output (I/O) operations that transfer fixed-sized units at natural storage boundaries specific to the storage device. A block that is stored on a storage device beginning at a natural storage boundary of the storage device is said to be naturally aligned with the storage device. There are boundaries where I/O operations that naturally align have higher performance than when those boundaries do not align. For example, if a storage device always performs I/O operations in multiples of 4K (4,096 bytes) starting at block 0, then a host that sends I/O operations in multiples of 4K that are always on a 4K boundary will have optimal performance. Whereas a different host that sends I/O operations of 4K, but sends those I/O operations on a 2K boundary will force the storage device to perform additional work that will reduce the performance of those I/O operations.
Accordingly, a need exists for an improved solution for storage. A further need exists for an improved solution for storage in a host virtualization environment.